package com.metro.qd.acc;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.joda.ser.LocalDateSerializer;
import com.metro.json.LocalTimeSerializer;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;

import java.io.Serializable;
import java.util.Objects;

public class TicketTrading implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 票卡号
     */
    @JsonProperty("ticket_id")
    public String ticketId;

    /**
     * 交易日期
     */
    @JsonProperty("txn_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonSerialize(using = LocalDateSerializer.class)
    public LocalDate txnDate;

    /**
     * 交易时间
     */
    @JsonProperty("txn_time")
    @JsonFormat(pattern = "HH:mm:ss")
    @JsonSerialize(using = LocalTimeSerializer.class)
    public LocalTime txnTime;
    /**
     * 卡计数器
     */
    @JsonProperty("card_counter")
    public int cardCounter;

    /**
     * 清分日期
     */
    @JsonProperty("stl_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonSerialize(using = LocalDateSerializer.class)
    public LocalDate stlDate;

    /**
     * 票卡主类型
     */
    @JsonProperty("ticket_main_type")
    public int ticketMainType;

    /**
     * 票卡类型
     */
    @JsonProperty("ticket_type")
    public int ticketType;

    /**
     * 交易类型
     */
    @JsonProperty("trans_code")
    public int transCode;

    /**
     * 介质类型
     */
    @JsonProperty("pay_type")
    public int pay_Type;

    /**
     * 交易车站编码
     */
    @JsonProperty("trading_station_id")
    public int tradingStationId;

    /**
     * 上次交易车站
     */
    @JsonProperty("trading_station_id_last")
    public int tradingStationIdLast;

    /**
     * 上次交易时间
     */
    @JsonProperty("last_time")
    @JsonFormat(pattern = "HH:mm:ss")
    @JsonSerialize(using = LocalTimeSerializer.class)
    public LocalTime lastTime;

    /**
     * 交易金额
     */
    @JsonProperty("txn_amt")
    public int txnAmt;

    /**
     * 交易设备编码
     */
    @JsonProperty("dev_code")
    public String devCode;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TicketTrading that = (TicketTrading) o;
        return ticketId.equals(that.ticketId) &&
                txnDate.equals(that.txnDate) &&
                txnTime.equals(that.txnTime);
    }

    @Override
    public int hashCode() {
        return Objects.hash(ticketId, txnDate, txnTime);
    }
}
